package com.example.kotlinstudy.bean

//通常可以不使用临时变量 而使用var  减少重复代码，相当于java中的，this.name=name
class ClassDefinition2(_name: String, var age: Int = 20, var isNormal: Boolean) { //主构造函数  //还可以给默认值 age: Int = 20
    var name = _name  //使用var减少了这行代码

    constructor(name: String) : this(name, age = 10, isNormal = true) //次构造函数,还是需要调用主要构造函数，需要给一个默认值
    constructor(name: String, age: Int) : this(name, age = 10, isNormal = true) //次构造函数
    {
        this.name = name.toUpperCase()   //还可以在里面写逻辑代码（转大写）
    }

    init { //初使化代码块   构建对象的时候执行也就是构造方法执行完了

        //先决条件函数
        require(age > 0) { "age must be positive" }

        require(name.isNotBlank()) { "player must have a name " } //如果是空的将会抛这样一个异常


    }
}

fun main() {
   /* var classDefinition2 = ClassDefinition2("", 20, true)
    println(classDefinition2.name)

    val classDefinition21 = ClassDefinition2("Rose")
    println(classDefinition21.name)

    var classDefinition22 = ClassDefinition2("rose", 20)
    println(classDefinition22.name)

    ClassDefinition2("", isNormal = true)//还指定给值。*/

    var classDefinition3 = ClassDefinition3("lzj", 18)
    classDefinition3.test()
    println(classDefinition3.name +"\n"+ classDefinition3.age)

}

class ClassDefinition3(var name: String,val age: Int=20){
    fun test() {
        this.name = "lj"
        //this.age=30    //val在这里不能再重新指定值
    }
}